"""
2. 生产者 - 消费者模型（40 分）
题目描述：使用多线程实现生产者 - 消费者模型。生产者线程生成 0-9 的数字并放入队列，消费者线程从队列取出数字并打印平方值。使用queue.Queue作为共享队列，创建 2 个生产者和 3 个消费者线程。
评分标准：
正确使用Queue（10 分）
生产者和消费者逻辑正确（10 分）
线程正确启动和终止（10 分）
输出所有数字的平方（10 分）
"""
import threading
import queue
import time

def producer(q):
    for num in range(10):
        q.put(num)
        time.sleep(0.1)  # 模拟生产耗时

def consumer(q):
    while True:
        item = q.get()
        if item is None:  # 终止信号
            q.put(None)  # 传递终止信号给其他消费者
            break
        print(f"{item}^2 = {item**2}")
        q.task_done()

q = queue.Queue()
producers = [threading.Thread(target=producer, args=(q,)) for _ in range(2)]
consumers = [threading.Thread(target=consumer, args=(q,)) for _ in range(3)]

for t in producers:
    t.start()
for t in consumers:
    t.start()

for t in producers:
    t.join()

q.put(None)  # 发送终止信号
for t in consumers:
    t.join()
